# -*- coding: utf-8 -*-
"""
Created on Fri Aug 25 16:04:59 2023

@author: skunk69
"""

import json

chinese_name = u'Yale-Brown强迫量表'
english_name = 'Yale-Brown Obsessive Compulsive Scale'
abbreviation = 'Y-BOCS'
category = u'精神病学临床量表'

outline = u"""耶鲁布朗强迫症状严重程度量表（Yale-Brown Obsessive-Compulsive Scale, Y-BOCS）是美国GOODMAN等人根据DSM-III-R诊断标准而制定的专门测定强迫症状严重程度的量表，是临床上使用的评定强迫症的主要量表之一。耶鲁布朗强迫量表是一个他评的强迫症量表，医生可根据病人的情况作出相应的评定。"""

instruction = u"""Y-BOCS所有项目采用0~4分的5级评分法，各级的标准为：0为无，1为轻，2为中等，3为重，4为极重。项目4、9中的评分0为主观上对症状完全抵制，4分指主观上对症状放弃抵制。项目5、10中的评分0为对症状可完全控制，4分指对症状完全不能控制。"""

with open('Y-BOCS.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

lines_items = [l.strip() for l in lines[0:10]]
lines_items_definition = [l.strip() for l in lines[10:20]]
lines_rating_standard = [l.strip() for l in lines[20::]]

items = {}
for num,line in enumerate(lines_items):
    _,value = line.split('、',maxsplit=1)
    items[num+1] = value

items_definition = {}
for num,line in enumerate(lines_items_definition):
    _,value = line.split('、',maxsplit=1)
    items_definition[num+1] = value

rating_standard = {}
for num,line in enumerate(lines_rating_standard[::6]):
    item = {}
    _,value = line.split('、',maxsplit=1)
    item[num+1] = value.strip()
    rate = {}
    lines_rate = lines_rating_standard[num*6+1:(num+1)*6]
    for i in range(len(lines_rate)):
         k,v = lines_rate[i].strip().split('.')
         rate[k] = v.strip()
    rating_standard[num+1] = [item,rate]

reverse_items = []
scales = [u'强迫思维',u'强迫行为']
scales_items = [
    list(range(1,6)),
    list(range(6,11))
    ]
factors = []
factors_scales = []
rating = [u'无',u'轻',u'中等',u'重',u'极重']
score_rules = list(range(5))

contents = {
    'instruction':instruction,
    'items':items,
    'items_definition':items_definition,
    'rating_standard':rating_standard,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules
    }

implementation = u"""本评定量表设计用来评定强迫性障碍（OCD）患者的症状严重程度和类型。一般而言，本量表的条目取决于患者的描述；不过，其最终评分仍基于咨询师的临床评判。要求评定要依据咨询前一周直至咨询当时全过程中来访者的情况，评分反应整个星期患者强迫思维和强迫行为的情况，以及患者整体的强迫程度。
本评定量表意在用作半定式晤谈。评定者应按照量表所列顺序评定各条目并用量表所提供的问题询问，但评定者为了澄清细节可以自由询问补充问题。在咨询期间，无论何时，若患者主动提供病情，评定者应对该病情予以考虑。评定应主要以咨询期间患者的叙述及所获得的观察结果为基础。若你断定患者提供的情况基本上不准确，那么患者的可靠性就值得怀疑，应在咨询结束时作出相应注释。只有当作出下述判断时，才可在确定评分时纳入其他人（如配偶或父母）提供的补充资料：（1）这类资料对于恰当地评定症状的严重程度有效；（2）通过在每次评定时始终让同一（几）个供史者在场以保证连贯一致的逐周病情介绍。
在开始提问前，让患者明确“强迫思维”和“强迫行为”含义如下：
“强迫思维为仿佛进入你头脑中的不情愿且令人烦恼的观念、想法、表象或冲动，它们可能是违背你的意愿出现的，可能令你反感，你也可能认为它们毫无意思，而且它们可能并不符合你的性格。”
“另一方面，强迫行为则是一些尽管你可能会认为毫无意义或过分而你又感到不得已而为之的行为或动作。有时，你可能会竭力抗拒去做这类行为或动作，但实际上往往很难做到。你可能会体验到直到做了这类行为才减轻的焦虑”。
“我来给你举几个强迫思维和强迫行为的例子。”
“举一个强迫思维的例子：反复出现严重伤害你孩子身体的想法或冲动，尽管你永远也不会那样做。”
“举一个强迫行为的例子：需要反复检查各种用具、水龙头和大门门锁之后才能离开房间。虽然多数强迫行为是可观察到的行为，但也有一些不能观察到的心理活动。如默默检查或每当你有个坏想法就得对自己背诵毫无意义的短语。”
“对我上面说过的话还有什么疑问吗？”（如果没有就开始。）
在重复测验时，只要能够确定患者理解这些定义与例子，就不必总是重读它们。此时，只要提醒患者强迫思维是那些想法或担心，强迫行为是那些你感到被迫去做的包括隐蔽的的心理活动在内的事就够了。
一次检查评估约需时30分钟。"""

reliability = u"""中文版Y-BOCS对110名强迫症患者的评定显示了良好的评定者间一致性。各条目及量表总分的ICC≥0.82，Cronbach α为0.75。"""
validity = u"""强迫思维分量表的区分效度不理想，与HAMA和HAMD间存在相关。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""总分，量表所有条目得分之和。分数越高表示症状越严重。
分量表分，强迫思维量表为条目1~5得分之和，强迫行为分量表为6~10得分之和。"""

applications = u"""Y-BOCS已经成为强迫症状评定量表的金标准。评估强迫症状的严重程度有很好的信度和效度。对治疗后的变化敏感，可用于监测疗效。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)